package em.program.imp;

import base.util.DateUtil;
import com.alibaba.fastjson.JSONObject;
import em.program.MsgApiHandle;
import em.util.ConstUtil;

import java.util.Map;

/**
 * Created by Administrator on 2016-1-30.
 */
public class MsgApiImp extends MsgApiHandle {
    @Override
    protected void realHandle(JSONObject json) {
        RealData.getInstance().setData(json);
    }

    @Override
    protected void otherHandle(JSONObject json) {
        OtherData.getInstance().setData(json);
    }

    @Override
    public boolean sendData(String command) {
       return super.sendData(command);
    }

    @Override
    public boolean sendData(String command, byte[] bytes, int start, int end) {
        return super.sendData(command, bytes, start, end);
    }
    /**
     * 取得当前终端状态
     * @param strTnum
     * @return
     */
    protected Integer getCurrentStatus(String strTnum){
        synchronized (mapCurrentOrder){
            if(mapCurrentOrder.containsKey(strTnum)) return mapCurrentOrder.get(strTnum);
            else return -1;
        }
    }

    /**
     * 设定当前终端状态
     */
    protected void setCurrentStatus(String strTnum,Integer iCurrentStatus){
        synchronized (mapCurrentOrder){
            mapCurrentOrder.put(strTnum,iCurrentStatus);
        }
    }

    /**
     * 判断是否可以向终端发送数据
     * @param iCurrentOrder 当前向终端发送的命令
     * @param strTnum 当前终端编号
     * @return:5正在升级，8正在拍照，9正在实时工况,0正常(需要发送命令)，-2命令已发送（等待数据）
     */
    protected Integer isCheckStatus(String strTnum,Integer iCurrentOrder){
        Integer iCurrentStatus= getCurrentStatus(strTnum);//取得当前终端状态
        if(iCurrentStatus!=-1){
            if(iCurrentStatus!=iCurrentOrder){
                if(iCurrentOrder==8){//当前请求拍照
                    if(iCurrentStatus==9){//当前终端状态为实时工况，则需要停止实时工况
                        //RealData.getInstance().stopRealAction(strTnum);
                    }
                    return 0;
                }else if(iCurrentOrder==9){//当前请求实时工况
                    if(iCurrentStatus==8) return 8;
                }else if(iCurrentOrder==5){
                    if(iCurrentStatus==8 || iCurrentStatus==9) return iCurrentStatus;
                }
            }else{
                return -2;
            }
        }
        return 0;
    }

    /**
     * 取得结果数据
     * @return
     */
    protected String getResultData(String strKey,Map<String,String> saveMap,Integer iSecond,Boolean isRemove){
        //取得数据 iSecond秒等待时候
        for (int i = 0; i < iSecond; i++) {
            if(saveMap.containsKey(strKey)){
                String strResult="";
                //当取得的数据的时间超过iSecond秒，则数据无效，在iSecond秒内，返回数据
                if(DateUtil.getInstance().addSecond(JSONObject.parseObject(saveMap.get(strKey)).getDate("currentTime"),
                        iSecond).compareTo(DateUtil.getInstance().getCurrentDate())!=-1){
                    strResult= saveMap.get(strKey);
                    if(isRemove)
                        saveMap.remove(strKey);
                    return strResult;
                }
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //当没有取到数据时,将状态还原
        if(getCurrentStatus(strKey)!=-1){setCurrentStatus(strKey,0);}
        return String.format(ConstUtil.ERROR_ACTION,-1);//连接超时
    }
}
